Alex Liang

[Ruby筆記] .each v.s. for

練習Learn Ruby the Hardway時,習題32講到迴圈和陣列。 其中存取陣列時有二種不同的方式:.each和for

這二種方式看起來差不多,但對於程式碼執行結果會讓人有”驚喜”的感覺

二者的差異在於scope,對C/C++或Java等靜態語言來說,在{}內或function內的變數只在local有效

而javascript或ruby對變數的scope則略有不同

如以下的程式碼,for不會建立新的scope;而each會建立新的scope

1
2
3
4
5
6
7
8
9
10
11
12
13
count = [1, 2, 3, 4, 5]
for number in count
z = number
end

puts z # 5
puts number # 5

count.each do |y|
a = y
end
puts a # undefined local variable
puts y # undefined local variable

我們在使用each時得小心這個特性,以免造成莫名其妙的bug。

參考資料:
stack overflow討論